<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <!-- 引入 React 核心库 -->
  <script src="../js/react.development.js"></script>
  <!-- 用于支持 React操作DOM -->
  <script src="../js/react-dom.development.js"></script>
  <!-- 用于将 jsx转为js -->
  <script src="../js/babel.min.js"></script>
</head>

<body>
  <div id="root"></div>

  <script type="text/babel">
    // 整个构造器只会调一次
    class Count extends React.Component{
      constructor(props) { 
        console.log('constructor')
        super(props)
        this.state = {count: 0}
      }
      
      AddCount = () => {
        this.setState({count: this.state.count+1})
      }
      // 强制更新
      force = () => {
        // 强制更新钩子
        this.forceUpdate()
      }
      // 销毁组件
      unMount = () => {
        ReactDOM.unmountComponentAtNode(document.getElementById('root'))
      }
      // 挂载前
      componentWillMount() {
        console.log('componentWillMount')
      }
      // 挂载完成
      componentDidMount() {
        console.log('componentDidMount')
      }
      // 是否允许更新 “开阀”
      shouldComponentUpdate() {
        console.log('shouldComponentUpdate')
        return true
      }
      // 更新之前
      componentWillUpdate() {
        console.log('componentWillUpdate')
      }
      // 更新完成
      componentDidUpdate() {
        console.log('componentDidUpdate')
      }
      // 渲染
      render() {
        console.log('render')
        // onChange: 返回的只能是个函数， 
        return (
          <div>
            <div>计时器：{this.state.count}</div>
            <button onClick={this.AddCount}>点击+1</button>
            <button onClick={this.unMount}>点击销毁组件</button>
            <button onClick={this.force}>强制更新页面</button>
          </div>
        )
      }
    }
    // 此章节就相当于 Vue 的 v-model 
    ReactDOM.render(<Count/>, document.getElementById('root'))
  </script>
</body>

</html>